import Vue from 'vue';
import axios from 'axios';
// import {
//     VueJsonp
// } from 'vue-jsonp'
// Vue.use(VueJsonp)
import a from "./axios.js"
export default {

    // 配置信息
    config: {

        // 请求域名
        domain: "",
        // 是否进行 data 参数序列化
        isQsData: true,
        // 是否请求带token
        isToken: true,
        // 是否请求带sid
        isSid: true,
        // 统一处理错误提示
        isErrorAlert: true,
        // 统一处理拦截处理错误
        isErrorHandle: true,
        // 是否启用加载框
        isLoading: false,
        // 请求延迟，调试用
        delayTime: 0,
        // 是否返回数据源 如果为否则是对象内数据，如果为是则是接口原数据
        isDataSource: false,

        dataType: "",


    },


    // GET 请求
    async get(_data, _appWindow) {
        _data.method = "GET";
        return await a._axios(_data, {
            ...this.config
        }, _appWindow)
    },
    // POST 请求
    async post(_data, _appWindow) {

        _data.method = "POST";
        return await a._axios(_data, {
            ...this.config
        }, _appWindow)
    },
    // jsonp 请求
    async jsonp(_data, _appWindow) {

        return new Promise((resolve, reject) => {
            if (!_data.url)
                throw new Error('url is necessary')
            const callback = 'CALLBACK' + Math.random().toString().substr(9, 18)
            // const callback = 'cb_callback'
            const JSONP = document.createElement('script')
            JSONP.setAttribute('type', 'text/javascript')

            const headEle = document.getElementsByTagName('head')[0]

            let ret = '';
            if (_data.params) {
                if (typeof _data.params === 'string')
                    ret = '&' + _data.params;
                else if (typeof _data.params === 'object') {
                    for (let key in _data.params)
                        ret += '&' + key + '=' + encodeURIComponent(_data.params[key]);
                }
                ret += '&_time=' + Date.now();
            }
            JSONP.src = `${_data.url}?callback=${callback}${ret}`;

            Vue.prototype.$Window[callback] = function (r) {
                resolve(r);
                headEle.removeChild(JSONP)
                delete window[callback]
            }

            headEle.appendChild(JSONP)
            // Vue.prototype.$jsonp(_data.url, _data.params).then(
            //     (json) => {
            //         console.log(json)
            //     }).catch(err => {
            //     console.log(err)
            // })
        });

    },


    // json 请求
    async json(_data, _appWindow) {

        return new Promise((resolve, reject) => {
            // 为给定 ID 的 user 创建请求
            axios.get(_data.url)
                .then(function (response) {
                    response._ok=true
                    resolve(response)
                })
                .catch(function (error) {
                    resolve({
                        _ok:false
                    })
                });
        });

    },
}